package com.atmilan.quartz.job;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;

import com.atmilan.quartz.constant.Constants;
import com.atmilan.quartz.constant.enums.SyncStatusEnum;
import com.atmilan.quartz.model.entity.crmeb.SystemConfig;
import com.atmilan.quartz.service.ISystemConfigService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

import lombok.extern.slf4j.Slf4j;

/**
 * 初始化操作
 * @Description: 
 * @author daigb
 * @date 2021-01-15
 */
@Slf4j
@Component
@Configuration
@EnableScheduling
public class BaseTask {
    @Autowired
    ISystemConfigService systemConfigService;

    @PostConstruct
    public void startConfig() {
        List<String> syncs = new ArrayList<>();
        syncs.add(Constants.BUYER_SYNC_STATUS);
        syncs.add(Constants.EUROPE_SYNC_STATUS);
        syncs.add(Constants.IM_SYNC_STATUS);
        syncs.add(Constants.XYY_SYNC_STATUS);
        syncs.add(Constants.LEAM_SYNC_STATUS);
        syncs.add(Constants.BELLETTINI_SYNC_STATUS);
        syncs.add(Constants.JKY_SYNC_STATUS);
        syncs.add(Constants.JKY_PUSH_STATUS);
        syncs.add(Constants.VIETTI_SYNC_STATUS);
        syncs.add(Constants.COLTORTI_SYNC_STATUS);
        syncs.add(Constants.GB_SYNC_STATUS);
        syncs.add(Constants.CAROTTA_SYNC_STATUS);
        syncs.add(Constants.TUSOU_SYNC_STATUS);
        syncs.add(Constants.OSS_SYNC_STATUS);
        syncs.add(Constants.FOLLI_SYNC_STATUS);
        syncs.add(Constants.DELLOGLIO_SYNC_STATUS);
        syncs.add(Constants.ORANGE_SYNC_STATUS);
        syncs.add(Constants.LAVITA_SYNC_STATUS);
        syncs.add(Constants.PURE_SYNC_STATUS);
        syncs.add(Constants.UNIBUY_SYNC_STATUS);
        syncs.add(Constants.JST_SYNC_STATUS);
        syncs.add(Constants.EFASION_SYNC_STATUS);
        syncs.add(Constants.GUANJP_SYNC_STATUS);
        syncs.add(Constants.PAOLO_SYNC_STATUS);
        if(CollectionUtils.isNotEmpty(syncs)) {
            systemConfigService.update(Wrappers.<SystemConfig>lambdaUpdate()
                    .in(SystemConfig::getName, syncs)
                    .set(SystemConfig::getFormId, SyncStatusEnum.PUSH)
                    .set(SystemConfig::getValue, "0,0")
                    .set(SystemConfig::getUpdateTime, new Date())
                    );
        }
    }
    
    /**
     * 任务状态改变
     * @Description:  
     * @author daigb 
     * @param @param name
     * @param @param value
     * @param @param systemConfig
     * @return void
     * @throws
     */
    public void updateSyscStatus(String name, SyncStatusEnum value, SystemConfig systemConfig) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String[] values = systemConfig.getValue().split(",");
        // 当天数据则递加
        if (SyncStatusEnum.WAIT != value) {
            if (sdf.format(systemConfig.getUpdateTime()).equals(sdf.format(new Date()))) {
                values[0] = SyncStatusEnum.SYNC == value ? (Integer.parseInt(values[0]) + 1) + "" : values[0];
                values[1] = SyncStatusEnum.PUSH == value ? (Integer.parseInt(values[1]) + 1) + "" : values[1];
            } else {
                values[0] = SyncStatusEnum.SYNC == value ? "1" : "0";
                values[1] = SyncStatusEnum.PUSH == value ? "1" : "0";
            }
        }

        if(2 > values.length) {
            values = new String[2];
            values[0] = "0";
            values[1] = "0";
        }
        systemConfigService.update(Wrappers.<SystemConfig>lambdaUpdate()
                .eq(SystemConfig::getName, name)
                .set(SystemConfig::getFormId, value)
                .set(SystemConfig::getValue, values[0] + "," + values[1])
                .set(SystemConfig::getUpdateTime, new Date()));
        log.warn("--------------- config: {}状态改变为: {} ---------------", name, value.getMsg());
    }

}
